home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48hor1 / ratpac.src < prev    next >
Text File  |  1991-05-29  |  3KB  |  143 lines

  1. %%HP: T(3)F(.);
  2. @ RATPAC, by Ted A Smith
  3. DIR
  4.   QAdd  @ Quotient Add
  5.     \<< Q\->3 4 ROLL Q\->3 4 ROLL DUP2 GCD ROT OVER / SWAP ROT OVER / SWAP
  6.      \-> i2 n2 i1 n1 d1 d2 dgcd
  7.       \<< i1 i2 + d1 n2 * d2 n1 * + d1 d2 * dgcd * Q3\->
  8.       \>>
  9.     \>>
  10.   QSub  @ Quotient Subtract
  11.     \<< QNeg QAdd
  12.     \>>
  13.   QMul  @ Quotient Multiply
  14.     \<<
  15.       IF OVER DUP TYPE 9 SAME
  16.         SWAP SIZE 5 SAME AND
  17.         VER DUP TYPE 9 SAME
  18.         SWAP SIZE 5 SAME AND OR
  19.       THEN Q\->3 4 ROLL Q\->3 \-> i2 n2 d2 i1 n1 d1
  20.         \<< i1 i2 * n1 n2 * i2 n1 * d2 * + i1 n2 * d1 * + d1 d2 * Q3\->
  21.         \>>
  22.       ELSE Q\->2 ROT Q\->2 4 ROLL RLT ROT 4 ROLL RLT SWAP ROT * ROT ROT * Q2\->
  23.       END
  24.     \>>
  25.   QDiv  @ Quotient Divide
  26.     \<< QInv QMul
  27.     \>>
  28.   QNeg  @ Quotient Negate
  29.     \<< Q\->3 ROT NEG ROT NEG ROT Q3\->
  30.     \>>
  31.   QInv  @ Quotient Reciprocate
  32.     \<< Q\->2 SWAP Q2\->
  33.     \>>
  34.   Q\->I @ Quotient to Integer
  35.     \<< EVAL IP
  36.     \>>
  37.   Q\->F @ Quotient to Continued Fraction
  38.     \<< { } SWAP Q\->2
  39.       WHILE DUP
  40.       REPEAT DUP2 / IP DUP2 * 5 ROLL ROT + ROT ROT 4 ROLL SWAP -
  41.       END DROP2
  42.     \>>
  43.   QF\-> @ Continued Fraction to Quotient
  44.     \<< OBJ\-> 1 0 1 4 ROLL
  45.       START OVER 4 ROLL * + SWAP
  46.       NEXT Q2\->
  47.     \>>
  48.   CST { QAdd QSub QMul QDiv QNeg QInv Q\->I Q\->F QF\-> }
  49.   Cmp\->  @ convert with ASC->
  50. "D9D20ECE8112040379C1F3040379C194040379C1B7040379C1B21303471"
  51.   GCD  @ Greatest Common Divisor
  52.     \<<
  53.       IF DUP2 AND
  54.       THEN
  55.         WHILE OVER
  56.         REPEAT OVER MOD SWAP
  57.         END SWAP DROP
  58.       ELSE DROP2 1
  59.       END
  60.     \>>
  61.   Q2\->
  62.     \<< Q2\->2
  63.       IF DUP 1 SAME
  64.       THEN DROP
  65.       ELSE { / } OBJ\-> DROP 3 \->Alg
  66.       END
  67.     \>>
  68.   Q2\->2
  69.     \<<
  70.       IF OVER NOT
  71.       THEN DROP 1
  72.       END RLT
  73.       IF DUP 0 <
  74.       THEN NEG SWAP NEG SWAP
  75.       END
  76.     \>>
  77.   Q3\->
  78.     \<< Q2\->2 DUP2 / IP DUP 5 ROLL + SWAP 3 PICK * 4 ROLL SWAP -
  79.       IF OVER SIGN OVER SIGN + NOT
  80.       THEN
  81.         CASE OVER SIGN DUP 1 SAME
  82.           THEN DROP 3 PICK + SWAP 1 - SWAP
  83.           END -1 SAME
  84.           THEN 3 PICK - SWAP 1 + SWAP
  85.           END
  86.         END
  87.       END ROT
  88.       IF OVER
  89.       THEN
  90.         IF 3 PICK
  91.         THEN { / + } OBJ\-> DROP 5
  92.         ELSE ROT DROP { / } OBJ\-> DROP 3
  93.         END \->Alg
  94.       ELSE DROP2
  95.       END
  96.     \>>
  97.   QR\->2
  98.     \<< \->NUM
  99.       CASE DUP FP SIGN DUP NOT
  100.         THEN DROP 1
  101.         END 1 SAME
  102.         THEN \->Q OBJ\-> DROP2
  103.         END NEG \->Q OBJ\-> DROP2 SWAP NEG SWAP
  104.       END
  105.     \>>
  106.   Q\->
  107.     \<<
  108.       IF DUP TYPE 9 SAME
  109.       THEN Cmp\->
  110.         IF DUP 5 SAME
  111.         THEN 3 DROPN 3
  112.         ELSE DROP2 2
  113.         END
  114.       ELSE \->NUM 0
  115.       END
  116.     \>>
  117.   Q\->2 @ Quotient to (improper) fraction, levels 2,1
  118.     \<< Q\->
  119.       IF DUP
  120.       THEN
  121.         IF 3 SAME
  122.         THEN ROT OVER * ROT + SWAP
  123.         END
  124.       ELSE DROP QR\->2
  125.       END
  126.     \>>
  127.   Q\->3 @ Quotient to (proper) fraction, levels 3,2,1
  128.     \<< Q\->
  129.       IF DUP
  130.       THEN
  131.         IF 2 SAME
  132.         THEN 0 ROT ROT
  133.         END
  134.       ELSE SWAP QR\->2
  135.       END
  136.     \>>
  137.   RLT @ Reduce to Lowest Terms
  138.     \<< DUP2 GCD ROT OVER / ROT ROT /
  139.     \>>
  140.   \->Alg  @ convert with ASC->
  141. "D9D2043C81D6450B2130474F"
  142. END
  143.